package chen.bupt.text;

import java.util.HashSet;
import java.util.Set;

/**
 * 加载去停词
 * 
 * @author forrest
 * 
 */
public class StopWordUtil {
	private static final String stopwords = "--,..,>>, [, ],,,,.,<,>,?,/,\\,|,-,_,+,=,*,&,^,%,#,@,!,~,`,;,:,',\",(,),$,,（,）,——,-,?,、,。,“,”,《,》,！,，,：,；,？,—,￥,·,...,‘,’,〉,〈,…,　,、,0,1,2,3,4,5,6,7,8,9,０,１,２,３,４,５,６,７,８,９,一,二,三,四,五,六,七,八,九,零,＞,＜,？,！,＠,＃,＄,％,︿,＆,＊,（,）,——,＋,～,`,。,，,、,｜,［,］,｛,｝,：,；,’,“,”,‘,啊,啊哈,啊呀,啊哟,挨次,挨个,挨家挨户,挨门挨户,挨门逐户,挨着,哎,哎呀,哎哟,唉,俺,俺们,按,按理,按期,按时,按说,按照,暗地里,暗中,暗自,昂然,吧,八成,把,白,白白,半,梆,保管,保险,饱,背地里,背靠背,倍感,倍加,被,本,本人,本身,本着,甭,比起,比如,比如说,比照,鄙人,毕竟,必,必定,必将,必须,便,别,别人,并,并非,并肩,并没,并没有,并排,并且,并无,勃然,不,不必,不常,不大,不单,不但,不但...而且,不得,不得不,不得了,不得已,不迭,不定,不独,不对,不妨,不管,不管怎样,不光,不过,不会,不仅,不仅...而且,不仅仅,不仅仅是,不经意,不拘,不可开交,不可抗拒,不力,不了,不料,不论,不满,不免,不能不,不起,不巧,不然,不然的话,不日,不少,不胜,不时,不是,不同,不能,不要,不外,不外乎,不下,不限,不消,不已,不亦乐乎,不由得,不再,不择手段,不怎么,不曾,不知不觉,不止,不止一次,不只,不至于,才,才能,策略地,差不多,差一点,常,常常,常言道,常言说,常言说得好,长此下去,长话短说,长期以来,长线,敞开儿,朝,彻夜,陈年,趁,趁便,趁机,趁热,趁势,趁早,趁着,成年,成年累月,成心,乘,乘机,乘胜,乘势,乘隙,乘虚,诚然,迟早,充分,充其极,充其量,冲,抽冷子,臭,初,出,出来,出去,除,除此,除此而外,除此以外,除此之外,除非,除开,除了,除去,除却,除外,处处,川流不息,传,传说,传闻,串行,纯,纯粹,此后,此间,此外,此中,次第,匆匆,从,从不,从此,从此以后,从而,从古到今,从古至今,从今以后,从宽,从来,从轻,从速,从头,从未,从无到有,从小,从新,从严,从优,从早到晚,从中,从重,凑巧,粗,存心,达旦,打,打从,打开天窗说亮话,大,大不了,大大,大抵,大都,大多,大凡,大概,大家,大举,大略,大面儿上,大事,大体,大体上,大约,大张旗鼓,大致,呆呆地,带,殆,待到,单,单纯,单单,但,但是,但愿,弹指之间,当,当场,当儿,当即,当口儿,当然,当庭,当头,当下,当真,当中,当着,倒不如,倒不如说,倒是,到,到处,到底,到了儿,到目前为止,到头,到头来,得,得起,得天独厚,的,的话,的确,等,等到,等等,第,叮当,顶多,定,动不动,动辄,陡然,都,独,独自,断然,对,对,对于,顿时,多次,多多,多多少少,多多益善,多亏,多年来,多年前,而,而后,而论,而且,而是,而外,而言,而已,而又,尔等,二话不说,二话没说,反倒,反倒是,反而,反过来,反手,反之,反之亦然,反之则,方,方才,方能,放量,非常,非但,非得,分期,分期分批,分头,奋勇,愤然,风雨无阻,逢,否则,弗,甫,嘎嘎,该,该当,概,赶快,赶早不赶晚,敢,敢情,敢于,刚,刚才,刚好,刚巧,高低,格外,隔日,隔夜,个,个人,各式,给,根据,更,更加,更进一步,更为,公然,共,共总,够瞧的,姑且,古来,故此,故而,故意,固,固然,怪,怪不得,关于,惯常,光,光是,归,归根到底,归根结底,果然,果真,过,过于,毫不,毫无,毫无保留地,毫无例外,好在,和,何必,何尝,何妨,何苦,何况,何乐而不为,何须,何止,嘿,很,很多,很少,轰然,后来,呼啦,乎,忽地,忽然,互,互相,哗,哗啦,话说,还,还是,换句话说,换言之,恍然,会,豁然,活,伙同,或,或多或少,或是,或许,或者,基本,基本上,基于,极,极大,极度,极端,极力,极其,极为,及,及其,及至,急匆匆,即,即便,即将,即刻,即令,即使,即是说,几度,几番,几乎,几经,既,既...又,既然,继而,继之,加上,加以,加之,假如,假若,假使,间或,简而言之,简言之,简直,鉴于,见,将,将才,将近,将要,交口,较,较比,较为,较之,接连不断,接下来,皆可,截然,截至,藉以,借此,借以,届时,仅,仅仅,谨,进而,进来,进去,近,近几年来,近来,近年来,尽管,尽管如此,尽可能,尽快,尽量,尽然,尽如人意,尽心竭力,尽心尽力,尽早,精光,经,经常,经过,竟,竟然,究竟,就,就此,就地,就是,就是说,就算,居然,局外,举凡,据,据称,据此,据实,据说,据我所知,据悉,具体地说,具体来说,具体说来,决不,决非,绝,绝不,绝顶,绝对,绝非,均,喀,开外,看,看来,看起来,看上去,看样子,可好,可见,可能,可是,可以,恐怕,快,快要,况且,啦,来,来不及,来得及,来讲,来看,拦腰,牢牢,老,老大,老老实实,老是,累次,累年,理当,理该,理应,历,例如,立,立地,立刻,立马,立时,联袂,连,连连,连日,连日来,连声,连同,连袂,了,临,临到,另方面,另外,另行,另一方面,另一个,路经,屡,屡次,屡次三番,屡屡,缕缕,率尔,率然,略,略加,略微,略为,论,论说,马上,嘛,蛮,满,冒,么,没,没有,每当,每逢,每每,每时每刻,们,猛然,猛然间,莫,莫不,莫非,莫如,莫若,默默地,默然,拿,哪怕,呐,那,那么,那末,那些,乃,乃至,奈,难道,难得,难怪,难说,内,你,你们,年复一年,您,凝神,宁可,宁肯,宁愿,哦,偶而,偶尔,怕,砰,碰巧,譬如,偏偏,乒,平素,颇,迫于,扑通,其,其次,其后,其实,其它,奇,齐,起,起初,起来,起首,起头,起先,岂,岂但,岂非,岂止,迄,恰逢,恰好,恰恰,恰恰相反,恰巧,恰如,恰似,千,千万,千万千万,前后,前者,切,切不可,切莫,切切,切勿,且,窃,亲口,亲身,亲手,亲眼,亲自,顷,顷刻,顷刻间,顷刻之间,请勿,穷年累月,取道,去,权时,全都,全力,全年,全然,全身心,然,然而,然后,让,人家,人人,仍,仍旧,仍然,日复一日,日见,日渐,日益,日臻,如,如常,如此等等,如次,如果,如今,如期,如前所述,如若,如上,如上所述,如下,汝,若,三番两次,三番五次,三天两头,瑟瑟,沙沙,上,上来,上去,人民,末,阿,吧哒,罢了,比,比方,彼,彼此,边,别的,别说,不比,不成,不怕,不如,不特,不惟,不问,朝着,此,待,地,叮咚,多,多少,而况,尔后,反过来说,非徒,嘎,嘎登,赶,各,各个,各位,各种,各自,跟,故,管,哈,哈哈,呵,何,何处,何时,哼,哼唷,呼哧,还有,极了,即或,即若,几,几时,己,既是,叫,接着,结果,借,紧接着,尽,开始,靠,咳,可,来着,离,哩,两者,另,吗,慢说,漫说,每,某,某个,某些,哪,哪边,哪儿,哪个,哪里,哪年,哪天,哪些,哪样,那边,那儿,那个,那会儿,那里,那么些,那么样,那时,那样,呢,能,宁,呕,啪达,旁人,呸,凭,凭借,其二,其他,其一,其余,其中,起见,然则,任,任何,任凭,如此,如何,如其,若非,若是,啥,上下,尚且,设若,设使,甚而,甚么,甚至,省得,时候,什么,什么样,使得,是,是的,首先,谁,谁知,顺,顺着,似的,虽,虽然,虽说,虽则,随,随着,所,所以,他,他们,他人,它,它们,她,她们,倘,倘或,倘然,倘若,倘使,腾,替,通过,同,同时,哇,万一,往,望,为,为何,为了,为什么,为着,喂,嗡嗡,我,我们,呜,呜呼,乌乎,无论,无宁,毋宁,嘻,吓,相对而言,像,向,向着,嘘,呀,焉,沿,沿着,要,要不,要不然,要不是,要么,要是,也,也罢,也好,一般,一旦,一方面,一来,一切,一样,一则,依,依照,矣,以,以便,以及,以免,以至,以至于,以致,抑或,因,因此,因而,因为,哟,用,由,由此可见,由于,有,有的,有关,有些,又,于,于是,于是乎,与,与此同时,与否,与其,越是,云云,哉,再说,再者,在,在下,咱,咱们,则,怎,怎么,怎么办,怎么样,怎样,咋,照,照着,者,这,这边,这儿,这个,这会儿,这就是说,这里,这么,这么点儿,这么些,这么样,这时,这些,这样,正如,吱,之,之类,之所以,之一,只是,只限,只要,只有,至,至于,诸位,着,着呢,自,自从,自个儿,自各儿,自己,自家,自身,综上所述,总的来看,总的来说,总的说来,总而言之,总之,纵,纵令,纵然,纵使,遵照,作为,兮,呃,呗,咚,咦,喏,啐,喔唷,嗬,嗯,嗳,A";

	private static Set<String> stopwordsSet = new HashSet<String>();

	static {

		String words[] = stopwords.split(",");
		for (String word : words) {
			if (!"".equals(word))
				stopwordsSet.add(word);
		}
	}
	
	private static final String specialTag = "¤;§;¨;°;à;á;è;é;ê;ì;í;ò;ó;÷;ù;ú;ü;ā;ē;ě;ī;ō;ū;ǎ;ǐ;ǒ;ǔ;ǖ;ǘ;ǚ;ǜ;ˇ;ˉ;Α;Β;Γ;Δ;Ε;Ζ;Η;Θ;Ι;Κ;Λ;Μ;Ν;Ξ;Ο;Π;Ρ;Σ;Τ;Υ;Φ;Χ;Ψ;Ω;α;β;γ;δ;ε;ζ;η;θ;ι;κ;λ;μ;ν;ξ;ο;π;ρ;σ;τ;υ;φ;χ;ψ;ω;Ё;А;Б;В;Г;Д;Е;Ж;З;И;Й;К;Л;М;Н;О;П;Р;С;Т;У;Ф;Х;Ц;Ч;Ш;Щ;Ъ;Ы;Ь;Э;Ю;Я;а;б;в;г;д;е;ж;з;и;й;к;л;м;н;о;п;р;с;т;у;ф;х;ц;ч;ш;щ;ъ;ы;ь;э;ю;я;ё;№;Ⅰ;Ⅱ;Ⅲ;Ⅳ;Ⅴ;Ⅵ;Ⅶ;Ⅷ;Ⅸ;Ⅹ;Ⅺ;Ⅻ;←;↑;→;↓;∈;∏;∑;√;∝;∞;∠;∥;∧;∨;∩;∪;∫;∮;∴;∵;∷;∽;≈;≌;≠;≡;≤;≥;≮;≯;⊙;⊥;⌒;③;⑥;⑧;⑨;⑩;⑴;⑵;⑶;⑷;⑸;⑹;⑺;⑻;⑼;⑽;⑾;⑿;⒀;⒁;⒂;⒃;⒄;⒅;⒆;⒇;⒈;⒉;⒊;⒋;⒌;⒍;⒎;⒏;⒐;⒑;⒒;⒓;⒔;⒕;⒖;⒗;⒘;⒙;⒚;⒛;─;━;│;┃;┄;┅;┆;┇;┈;┉;┊;┋;┌;┍;┎;┏;┐;┑;┒;┓;└;┕;┖;┗;┘;┙;┚;┛;├;┝;┞;┟;┠;┡;┢;┣;┤;┥;┦;┧;┨;┩;┪;┫;┬;┭;┮;┯;┰;┱;┲;┳;┴;┵;┶;┷;┸;┹;┺;┻;┼;┽;┾;┿;╀;╁;╂;╃;╄;╅;╆;╈;╉;╊;╋;■;□;◆;◇;○;◎;★;☆;♀;♂;々;〓;ぁ;あ;ぃ;い;ぅ;う;ぇ;え;ぉ;お;か;が;き;ぎ;く;ぐ;け;げ;こ;ご;さ;ざ;し;じ;す;ず;せ;ぜ;そ;ぞ;た;だ;ち;ぢ;っ;つ;づ;て;で;ど;な;に;ぬ;ね;の;は;ば;ぱ;ひ;び;ぴ;ぶ;ぷ;へ;べ;ぺ;ほ;ぼ;ぽ;ま;み;む;め;も;ゃ;や;ゅ;ゆ;ょ;よ;ら;り;る;れ;ろ;ゎ;わ;ゐ;ゑ;を;ん;ァ;ア;ィ;イ;ゥ;ウ;ェ;エ;ォ;オ;カ;ガ;キ;ギ;ク;グ;ケ;ゲ;コ;ゴ;サ;ザ;シ;ジ;ス;ズ;セ;ゼ;ソ;ゾ;タ;ダ;チ;ヂ;ッ;ツ;ヅ;テ;デ;ト;ド;ナ;ニ;ヌ;ネ;ノ;ハ;バ;パ;ヒ;ビ;ピ;フ;ブ;プ;ヘ;ベ;ペ;ホ;ボ;ポ;マ;ミ;ム;メ;モ;ャ;ヤ;ュ;ユ;ョ;ヨ;ラ;リ;レ;ロ;ヮ;ワ;ヰ;ヱ;ヲ;ン;ヴ;ヵ;ヶ;ㄅ;ㄆ;ㄇ;ㄈ;ㄉ;ㄊ;ㄋ;ㄌ;ㄍ;ㄎ;ㄏ;ㄐ;ㄑ;ㄒ;ㄓ;ㄔ;ㄕ;ㄗ;ㄘ;ㄙ;ㄚ;ㄛ;ㄜ;ㄝ;ㄞ;ㄟ;ㄠ;ㄡ;ㄢ;ㄣ;ㄤ;ㄥ;ㄦ;ㄧ;ㄨ;ㄩ;㈠;㈡;㈢;㈣;㈤;㈥;㈦;㈧;㈨;㈩;＝;＾;｀;￠;￡;￣;�;";
	private static Set<String> specialTagSet = new HashSet<String>();
	static {
		String words[] = specialTag.split(";");
		for (String word : words) {
			if (!"".equals(word))
				specialTagSet.add(word);
		}
	}
	
	public static boolean isSpecialTag(String word){
		return specialTagSet.contains(word);
	}

	public static boolean isStopWord(String term) {
		return stopwordsSet.contains(term);
	}
}
